const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const vueLoaderConfig = require('./build/vue-loader.conf');

module.exports = {
    // 设置入口文件
    entry: './src/main.js', // 你的项目入口文件

    // 设置输出文件
    output: {
        path: path.resolve(__dirname, 'dist'), // 输出文件夹
        filename: 'bundle.js', // 输出的文件名称
        publicPath: '/'
    },

    // 开发服务器配置
    devServer: {
        port: 8080, // 设置端口号
        hot: true, // 启用热模块替换（HMR）
        open: true, // 自动打开浏览器
        historyApiFallback: true,
        disableHostCheck: true,
        contentBase: [
            path.resolve(__dirname, 'static'),
            path.resolve(__dirname, 'public')
        ],
        // proxy: [
        //     {
        //         context: ['/api'],  // 请求的路径前缀
        //         target: 'http://localhost:5000',
        //         changeOrigin: true,
        //         rewrite: (path) => path.replace(/^\/api/, '')  // 重写路径
        //     }
        // ]
    },

    // 配置模块加载规则（如 Babel、CSS、图片等）
    module: {
        rules: [
            // Babel loader（用于转换 ES6+ 语法）
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader'
            },
            // CSS loader 和 style loader（用于支持 CSS 文件）
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader'],
            },
            // Vue loader（用于 Vue 单文件组件）
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: vueLoaderConfig
            },
            // 处理图片和字体等文件
            {
                test: /\.(png|jpg|jpeg|gif|svg)$/,
                use: ['file-loader'],
            },
            // 处理字体文件
            {
                test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: 'fonts/[name].[hash:7].[ext]'
                }
            }
        ]
    },

    // 路径别名配置
    resolve: {
        extensions: ['.js', '.vue', '.json'],
        alias: {
            'vue$': 'vue/dist/vue.esm.js',
            '@': path.resolve(__dirname, 'src'), // '@' 可以指向 src 文件夹
        }
    },

    // 插件配置
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: 'index.html',
            inject: true
        }),
        new CopyWebpackPlugin([
            {
                from: path.resolve(__dirname, 'static'),
                to: 'static'
            },
            {
                from: path.resolve(__dirname, 'public'),
                to: ''
            }
        ])
    ]
};
